home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
019
/
123range.arc
/
123RANGE.BAS
Wrap
BASIC Source File
|
1984-02-25
|
8KB
|
219 lines
10 ' 123RANGE.BAS List Lotus Range Names used in a spreadsheet file (.wks)20 '
20 ' Charles H. Greene dba ISM April 23, 1983
30 ' 150 West First Street Rev.1 May 20, 1983
40 ' New Richmond, Wi 54017 <715> 246-6690
50 '
60 ' Lotus v1.0 does not provide for listing Range Names that have been
70 ' assigned..this program provides a modest solution to that problem.
90 '
100 ' Range Name FLD.CNT()
110 ' Specification 1...5...10....5...20....5.28
120 ' AAAAAAAAAAAAAAABCCDDEEFFGGGG
130 ' where
140 ' A=range name 00h is used in place of space 20h
150 ' B=unknown 00h
160 ' C=begining column low/high byte format value is 1 less
170 ' D= row than actual value ie.2048=FF07h
180 ' E=ending column
190 ' F= row
200 ' G=seperators 0B 00 18 00h
210 '
220 '
1000 DEFINT A-Z
1010 DIM RANGE$(500)
1020 RCNT=0: RMAX=500
1030 BLACK=0: WHITE=7: BRIGHT=16: FG=WHITE: BG=BLACK
1040 FALSE=0: TRUE=NOT FALSE
1050 END.OF.FILE=FALSE
1060 FF$=CHR$(12)
1070 X=0: Y=0: Z=0
1080 X$=""
1090 'characters seperating range names
1100 LOTUS.CTL$(1)=CHR$(11) 'Range Name fields begin with this
1110 LOTUS.CTL$(2)=CHR$(0) ' sequence of characters (1)-(4)
1120 LOTUS.CTL$(3)=CHR$(24) 'any break in this sequence ends
1130 LOTUS.CTL$(4)=CHR$(0) ' the range names
5000 '
5010 ' Load table of column codes
5020 '
5030 DIM COL$(256)
5040 FOR X = 0 TO 255
5050 READ COL$(X)
5060 NEXT
5070 '
5080 ' Print Headings
5090 '
5100 PRINT
5110 KEY OFF: CLS: LOCATE ,,0
5120 HEAD1$="List Lotus(tm) Range Names 123RANGE <ISM>": PRINT HEAD1$
5130 PRINT
5140 '
5150 ' Get Lotus filespec
5160 '
5170 ON ERROR GOTO 15000
5180 PRINT "Enter LOTUS spreadsheet filespec : ";
5190 INPUT "",FILE$
5200 Z=INSTR(FILE$,".") 'make sure it has .wks extension
5210 IF Z=0 THEN FILE$=FILE$+".WKS"
5220 OPEN FILE$ AS #1 LEN=1
5230 FIELD #1,1 AS X$
5240 FCB=VARPTR(#1) 'address FCB
5250 Z=PEEK(FCB) 'file type must be random
5260 IF Z<>4 THEN CLOSE #1: GOTO 5140
5270 'address FCB
5250 Z=PEEK(FCB) 'file type must be random
5260 IF Z<>4 THEN CLOSE #1: GOTO 5140
5270 RCDLIMIT!=((PEEK(FCB+19)*256)*256)+PEEK(FCB+17)+(256*PEEK(FCB+18))
5280 IF RCDLIMIT!=0 THEN CLOSE #1: PRINT: PRINT "**** File not found ****": GOTO 5140
5290 PRINT: PRINT: PRINT "File contains "RCDLIMIT!"bytes.": PRINT: PRINT
5300 HEAD2$="File: "+FILE$+SPACE$(49-LEN(FILE$))+DATE$+" "+LEFT$(TIME$,5)
6000 '
6010 ' Process
6020 '
6030 GOSUB 8000 'get byte
6040 FLD.CNT=1: RANGE.NAME$=""
6050 WHILE NOT END.OF.FILE
6060 ON MATCH.CNT+1 GOSUB 10000, 10060, 10100, 10140, 11000
6070 GOSUB 8000
6080 WEND
7000 '
7010 ' End of Input
7020 '
7030 PRINT: PRINT: PRINT "< END OF LIST >"
7040 PRINT: PRINT
7050 INPUT "Output to Printer (Y/N) ";ANS$
7060 IF ANS$="Y" OR ANS$="y" THEN GOSUB 16000
7070 END 'done
8000 '
8010 ' Read file
8020 '
8030 RCDNO!=RCDNO!+1 'set next random record(byte) no.
8040 'check for end of file
8050 IF RCDNO!>RCDLIMIT! THEN END.OF.FILE=TRUE: X$="": GOTO 8070
8060 GET #1,RCDNO!
8070 RETURN
10000 '
10010 ' Look for start of range names 0Bh 00h 18h 00h
10020 '
10030 IF X$<>CHR$(11) THEN MATCH.CNT = 0:RETURN
10040 MATCH.CNT=1
10050 RETURN
10060 '
10070 IF X$<>CHR$(0) THEN MATCH.CNT = 0: GOTO 10000
10080 MATCH.CNT=2
10090 RETURN
10100 '
10110 IF X$<>CHR$(24) THEN MATCH.CNT = 0: GOTO 10000
10120 MATCH.CNT=3
10130 RETURN
10140 '
10150 IF X$<>CHR$(0) THEN MATCH.CNT = 0: GOTO 10000
10160 MATCH.CNT=4
10170 RETURN
11000 '
11010 ' Range name fields found
11020 '
11030 IF FLD.CNT > 15 GOTO 11070
11040 IF X$<>CHR$(0) THEN RANGE.NAME$=RANGE.NAME$+X$
11050 FLD.CNT=FLD.CNT+1
11060 RETURN
11070 IF FLD.CNT > 18 GOTO 11110
11080 IF FLD.CNT = 17 THEN RANGE.BEG.COL=ASC(X$)
11090 FLD.CNT=FLD.CNT+1
11100 RETURN
11110 IF FLD.CNT > 20 GOTO 11170
11120 IF FLD.CNT = 19 THEN RANGE.BEG.ROW=ASC(X$): GOTO 11150
11130 R=ASC(X$): IF R>8 THEN R=8
11140 RANGE.BEG.ROW=RANGE.BEG.ROW+(R*256)
11150 FLD.CNT=FLD.CNT+1
11160 RETURN
11170 IF FLD.CNT > 22 GOTO 11210
11180 IF FLD.CNT = 21 THEN RANGE.END.COL=ASC(X$)
11190 FLD.CNT=FLD.CNT+1
11200 RETURN
11210 IF FLD.CNT > 24 GOTO 11400
11220 IF FLD.CNT = 23 THEN RANGE.END.ROW=ASC(X$): FLD.CNT=FLD.CNT+1: RETURN
11230 ' row must be 1-2048
11240 R=ASC(X$): IF R>8 THEN R=8
11250 RANGE.END.ROW=RANGE.END.ROW+(R*256)
11260 '
11270 ' Print range entry
11280 '
11290 IF RCNT=RMAX THEN PRINT "*** RANGE$ ARRAY EXCEEDED ***": END
11300 RCNT=RCNT+1
11310 PRINT USING "\ \";RANGE.NAME$;
11320 RANGE.BEG$=COL$(RANGE.BEG.COL)+MID$(STR$(RANGE.BEG.ROW+1),2)
11330 RANGE.END$=COL$(RANGE.END.COL)+MID$(STR$(RANGE.END.ROW+1),2)
11340 PRINT " "RANGE.BEG$".."RANGE.END$" ";
11350 IF RANGE.BEG.ROW>2047 OR RANGE.END.ROW>2047 THEN PRINT "*** Out of bounds ***" ELSE PRINT
11360 RANGE.NAME$=RANGE.NAME$+SPACE$(17-LEN(RANGE.NAME$))
11370 RANGE$(RCNT)=RANGE.NAME$+" "+RANGE.BEG$+".."+RANGE.END$
11380 FLD.CNT=FLD.CNT+1: RANGE.NAME$=""
11390 RETURN
11400 IF X$<>LOTUS.CTL$(FLD.CNT-24) THEN END.OF.FILE=TRUE
11410 IF FLD.CNT < 28 THEN FLD.CNT=FLD.CNT+1 ELSE FLD.CNT=1
11420 RETURN
15000 '
15010 ' Error traps
15020 '
15030 IF ERR=57 THEN PRINT: PRINT "**** I/O Error ****": END
15040 IF ERR<24 OR ERR>25 GOTO 15090
15050 IF ERL = 5210 THEN 15110
15060 IF ERL<>8060 GOTO 15140
15070 PRINT:PRINT "**** Check disk drive -- press any key to continue ****"
15080 CHA24 OR ERR>25 GOTO 15090
15050 IF ERL = 5210 THEN 15110
15060 IF ERL<>8060 GOTO 15140
15070 PRINT:PRINT "**** Check disk drive -- press any key to continue ****"
15080 CHAR$=INKEY$: IF CHAR$="" THEN 15070 ELSE RESUME
15090 ' Disk file open errors
15100 GOTO 15170
15110 ' Disk I/O errors
15120 IF ERR=62 OR ERR=63 THEN END.OF.FILE=TRUE: X$="": RESUME 8070
15130 GOTO 15170
15140 '
15150 PRINT:PRINT "**** Check printer -- press any key to continue ****"
15160 CHAR$=INKEY$: IF CHAR$="" THEN 15160 ELSE RESUME
15170 '
15180 IF ERR=6 THEN RESUME NEXT
15190 PRINT "ERROR #"ERR" IN LINE "ERL
15200 ON ERROR GOTO 0
16000 '
16010 ' List ranges to printer in columns
16020 '
16030 C1=1: C2=(RCNT+1)/2: RMAX=C2-1: LINE.CNT=99: PAGE.CNT=0
16040 IF LINE.CNT>56 THEN GOSUB 16150 ' Page heading
16050 LPRINT RANGE$(C1);
16060 X=LEN(RANGE$(C1)): LPRINT SPC(40-X);
16070 LPRINT RANGE$(C2)
16080 LINE.CNT=LINE.CNT+1
16090 IF C1<RMAX THEN C1=C1+1: C2=C2+1: GOTO 16040
16100 ' Finish report
16110 LPRINT:LPRINT
16120 LPRINT "< END OF LIST >"
16130 LPRINT CHR$(12)
16140 RETURN
16150 '
16160 ' Page overflow
16170 '
16180 LPRINT CHR$(12) ' top of form
16190 LINE.CNT=4: PAGE.CNT=PAGE.CNT+1
16200 LPRINT HEAD1$" Page ";
16210 LPRINT USING "###";PAGE.CNT
16220 LPRINT HEAD2$
16230 LPRINT:LPRINT
16240 RETURN
60000 '
60010 ' Col Subscript
60020 '
60030 DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
60040 DATA AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ
60050 DATA BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ
60060 DATA CA,CB,CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CM,CN,CO,CP,CQ,CR,CS,CT,CU,CV,CW,CX,CY,CZ
60070 DATA DA,DB,DC,DD,DE,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DO,DP,DQ,DR,DS,DT,DU,DV,DW,DX,DY,DZ
60080 DATA EA,EB,EC,ED,EE,EF,EG,EH,EI,EJ,EK,EL,EM,EN,EO,EP,EQ,ER,ES,ET,EU,EV,EW,EX,EY,EZ
60090 DATA FA,FB,FC,FD,FE,FF,FG,FH,FI,FJ,FK,FL,FM,FN,FO,FP,FQ,FR,FS,FT,FU,FV,FW,FX,FY,FZ
60100 DATA GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK,GL,GM,GN,GO,GP,GQ,GR,GS,GT,GU,GV,GW,GX,GY,GZ
60110 DATA HA,HB,HC,HD,HE,HF,HG,HH,HI,HJ,HK,HL,HM,HN,HO,HP,HQ,HR,HS,HT,HU,HV,HW,HX,HY,HZ
60120 DATA IA,IB,IC,ID,IE,IF,IG,IH,II,IJ,IK,IL,IM,IN,IO,IP,IQ,IR,IS,IT,IU,IV